/**************************** (C) COPYRIGHT 2017 Fortiortech shenzhen *****************************
* File Name          : Customer.h
* Author             : Fortiortech Appliction Team
* Version            : V1.0
* Date               : 2017-12-21
* Description        : This file contains all the common data types used for
*                      Motor Control.
***************************************************************************************************
* All Rights Reserved
**************************************************************************************************/

/* Define to prevent recursive inclusion --------------------------------------------------------*/
#ifndef __CUSTOMER_H_
#define __CUSTOMER_H_

  #define version_mow      (5.0) 
  
/*芯片参数值-------------------------------------------------------------------*/
 /*CPU and PWM Parameter*/
 #define MCU_CLOCK                      (24.0)                                  // (MHz) 主频
 #define PWM_FREQUENCY_BLDC             (16.0)                                  // (kHz) 载波频率

 /*deadtime Parameter*/
 #define PWM_DEADTIME                   (2.0)                                   // (us) 死区时间
       

/*电机参数值-------------------------------------------------------------------*/
 #define Pole_Pairs                 (3.0)//  (7.0)   // (2.0)                                     // 极对数
 
/*有霍尔参数值-------------------------------------------------------------------*/
 #define DEGREES_120                    (0)       
 #define DEGREES_60                     (1)           
 #define HALL_SENSORS_PLACEMENT        DEGREES_120
 
 #define AdvanceEangle_EN              (0) // (1)                              //超前使能 //滞后使能
 #define HALLADVANCEFIX                 (1)                              //方向取反//预换向取反     
 #define HALLADVANCEEANGLE_CW           (-20)                             //正转超前角度//(-60~0)
 #define HALLADVANCEEANGLE_CCW          (-20)                             //反转超前角度//(-60~0)
 
 #define HALLSEL_0                      (0)                              //P02/P37/P36
 #define HALLSEL_1                      (1)                              //P14/P16/P21
 #define HALL_IO_IC                     (HALLSEL_0)    
 
 
/*硬件板子参数设置值------------------------------------------------------------*/
/*PWM high or low level Mode*/
/*根据驱动芯片的类型选择*/
#define All_High_Level                 (0)                                     // 驱动高电平有效
#define All_Low_Level                  (1)                                     // 驱动低电平有效
#define UP_H_DOWN_L                    (2)                                     // 上桥臂高电平有效，下桥臂低电平有效
#define UP_L_DOWN_H                    (3)                                     // 上桥臂低电平有效，下桥臂高电平有效
#define PWM_Level_Mode                 (UP_H_DOWN_L)

/*hardware current sample Parameter*/
/*电流基准的电路参数*/

#define HW_RSHUNT                      (0.001)                                 // (Ω)  采样电阻
#define HW_AMPGAIN                     (10.0)                                    // 运放放大倍数
#define HW_ADC_REF                     (5.0)                                   // (V)  ADC参考电压

/*hardware voltage sample Parameter*/
/*母线电压采样分压电路参数*/
#define RV1                            (0.0) //(43.0)                                  // (kΩ) 母线电压分压电阻1
#define RV2                            (30.0)//(62.0)//(0.0)                                   // (kΩ) 母线电压分压电阻2
#define RV3                            (5.1)                                   // (kΩ) 母线电压分压电阻3
#define RV                             ((RV1 + RV2 + RV3) / RV3)               // 分压比

 
/*启动参数参数值----------------------------------------------------------------*/
 #define Charge_Time                    (10)                                     // (ms) 预充电时间，单位：ms
 #define Charge_Duty                    (0.05)                                    // 预充电下桥Duty

 #define  START_Ramp_TimeINC             (10)             //载波次数
 #define  RAMP_DUTY_STA                  (0.30)//(0.15)//(0.10)           //初始占空比
 #define  RAMP_DUTY_END                  (0.30)//(0.15)//(0.10)           //结束占空比
 #define  RAMP_DUTY_INC                  (0.03)           //每（）次载波占空比增量
 
/*转速参数值-------------------------------------------------------------------*/
 #define MOTOR_SPEED_BASE               (30000.0)                                // (RPM) 速度基准
 /* motor run speed value */
 //电机运行时最大最小转速、堵转保护转速
 #define MOTOR_SPEED_MIN_RPM            (1050.0)                                 // (RPM) 运行最小转速
 #define MOTOR_SPEED_MAX_RPM            (10000.0)                                // (RPM) 运行最大转速
  
/*电机开机、关机的设置----------------------------------------------------------*/
 /* motor ON/0FF value */
 #define OFF_Duty                     _Q15(0.15/HW_ADC_REF)                              // 关机PWM占空比，小于该占空比关机                                                                                //关机PWM占空比，小于该占空比时关机
 #define ON_Duty                      _Q15(0.18/HW_ADC_REF)                              // 开机PWM占空比，大于该占空比时开机
 #define MIN_Duty                     _Q15(0.02/HW_ADC_REF)                              // 速度曲线上最小PWM占空比
 #define MAX_Duty                     _Q15(4.80/HW_ADC_REF)                               // 速度曲线上最大PWM占空比
 
 #define Min_BLDC_Duty                (0.15)  
 #define Max_BLDC_Duty                (0.80)//(0.52)////(0.80)//(1.00)//(0.80)// (1.00)            

 #define 	speed_chang_Current							  I_Value(45.0)
 #define 	speed_recover_Current						  I_Value(3.0)

 
 #define I_LimtValue_Up							   I_Value(35.5)                      // 母线电流限流区间触发值 60												  
 #define I_LimtValue_Out						   I_Value(35.0)                      // 母线电流限流区间稳定值 59														 
 #define I_LimtValue_Dw							   I_Value(30.0)                       // 母线电流限流区间退出值 50
 
 /*环路调节参数*/
 #define SPEED_LOOP_TIME                (1.0)                                    // (ms) 速度环调节周期 风扇速度环50，功率环5
 /*速度环调节参数*/
 #define SKP                            _Q12(0.5)                               // 外环KP
 #define SKI                            _Q12(0.005)                              // 外环KI
 #define SOUTMAX                        I_Value(5.0)                           // (A) 外环最大限幅值
 #define SOUTMIN                        I_Value(0.02)                           // (A) 外环最小限幅值
 #define SPEED_INC                      (100.0)                                  // 速度环增量
 #define SPEED_DEC                      (100.0)                                  // 速度环减量

/*模式选择设置值----------------------------------------------------------------*/
 /*IPM测试模式*/
 #define IPMtest                        (0)                                     // IPM测试或者MOS测试，MCU输出固定占空比
 #define NormalRun                      (1)                                     // 正常按电机状态机运行
 #define IPMState                       (NormalRun)

/*Motor  Direction: CW or CCW*/
#define  CW										          (0)														                                  // CW ,正转
#define  CCW									          (1)														                                 // CCW,反转
#define  NODIR                          (2)            

/*保护参数值-------------------------------------------------------------------*/
 /*硬件过流保护*/
 #define Hardware_FO_Protect            (1)                                     // 硬件FO过流保护使能，适用于IPM有FO保护的场合
 #define Hardware_CMP_Protect           (2)                                     // 硬件CMP比较过流保护使能，适用于MOS管应用场合
 #define Hardware_FO_CMP_Protect        (3)                                     // 硬件CMP比较和FO过流保护都使能
 #define Hardware_Protect_Disable       (4)                                     // 硬件过流保护禁止，用于测试
 #define HardwareCurrent_Protect        (Hardware_CMP_Protect)                  // 硬件过流保护实现方式

 /*硬件过流保护比较值来源*/
 #define Compare_DAC                    (0)                                     // DAC设置硬件过流值
 #define Compare_Hardware               (1)                                     // 硬件设置硬件过流值
 #define Compare_Mode                   (Compare_DAC)                           // 硬件过流值的来源
 
 /*硬件过流保护*/
 #define OverHardcurrentValue          (90.0)                                // (A) DAC模式下的硬件过流值
 /*软件过流保护*/
 #define CurrentcoverEnable            (1)                                     // 过流保护使能位, 0，不使能；1，使能
 #define OverSoftCurrentValue          I_Value(38.0)                           	// (A) 软件过流值
 #define OverCurrentcoverTime          (1000)                                  // (ms) 过流保护恢复时间

 #define Current1coverEnable           (1)                                     // 过流保护使能位, 0，不使能；1，使能
 #define OverSoftCurrentValue1         I_Value(45.0)                           	// (A) 软件过流值
 #define OverCurrentcoverTime1         (500)                                  // (ms) 过流保护恢复时间
 
 #define Current2coverEnable           (1)                                     // 过流保护使能位, 0，不使能；1，使能
 #define OverSoftCurrentValue2         I_Value(50.0)                           	// (A) 软件过流值
 #define OverCurrentcoverTime2         (400) //(200)                                // (ms) 过流保护恢复时间
 
 #define Current3coverEnable           (1)                                     // 过流保护使能位, 0，不使能；1，使能
 #define OverSoftCurrentValue3         I_Value(60.0)                           	// (A) 软件过流值
 #define OverCurrentcoverTime3         (300)//(100)                                  // (ms) 过流保护恢复时间 
 
 #define Current4coverEnable           (1)                                     // 过流保护使能位, 0，不使能；1，使能
 #define OverSoftCurrentValue4         I_Value(70.0)                           	// (A) 软件过流值
 #define OverCurrentcoverTime4         (10)                                  // (ms) 过流保护恢复时间 

 #define can_spi_write_conflict        (0)
 
 /*过欠压保护*/
 #define VoltageProtect                 (1)                                // 电压保护：Enable--使能  Disable--禁止  
 #define Over_Protect_Voltage           (31.5)                                  // (V) 直流电压过压保护值
 #define Over_Recover_Vlotage           (29.0)                                  // (V) 直流电压过压保护恢复值
 #define Under_Protect_Voltage          (18.0)                                   // (V) 直流电压欠压保护值
 #define Under_Recover_Vlotage          (19.0)                                   // (V) 直流电压欠压保护恢复值


#define  Tempera_Value_MOS(NTC_Value_mos)  _Q15(NTC_Value_mos/(10.0+NTC_Value_mos))
#define  Tempera_Value_BAT(NTC_Value_bat)  _Q15((NTC_Value_bat/(6.8+NTC_Value_bat)))
#define  Tempera_Value_MOT(NTC_Value_mot)  _Q15((NTC_Value_mot/(2.2+NTC_Value_mot)))

/*Mos温度保护*/
#define  Mos_TemperatureProtectEnable      (1)                              // MOS温度保护使能：1--使能  0--禁止
#define  OVER_Mos_Temperature            Tempera_Value_MOS(1.204/*1.117*/)  //92              // MOS过温保护阈值，根据NTC曲线设定 85度保护
#define  UNDER_Mos_Temperature           Tempera_Value_MOS(3.023/*1.683*/)  //60              // MOS低温恢复阈值，根据NTC曲线设定 60度恢复
#define  UNDER_Mos_Temperature1          Tempera_Value_MOS(122.4)                // MOS低温保护阈值，根据NTC曲线设定 -30度保护
#define  Over_Mos_TemperRecoverTime        (1000)                                // MOS过温恢复时间
/*BAT温度保护*/ 
#define  BAT_TemperatureProtectEnable      (0)                              // BAT温度保护使能：1--使能  0--禁止
#define  OVER_BAT_Temperature            Tempera_Value_BAT(1.001)                // BAT过温保护阈值，根据NTC曲线设定  75度保护
#define  UNDER_BAT_Temperature           Tempera_Value_BAT(1.683)                // BAT过温恢复阈值，根据NTC曲线设定  60度恢复
#define  UNDER_BAT_Temperature1          Tempera_Value_BAT(234.7)                // BAT低温保护阈值，根据NTC曲线设定 -40度保护
#define  Over_BAT_TemperRecoverTime        (5000)              
/*MOT温度保护*/ 
#define  MOT_TemperatureProtectEnable      (0)                              // MOT温度保护使能：1--使能  0--禁止
#define  OVER_MOT_Temperature            Tempera_Value_MOT(0.459)                // MOT过温保护阈值，根据NTC曲线设定  100度保护
#define  UNDER_MOT_Temperature           Tempera_Value_MOT(1.683)                // MOT过温恢复阈值，根据NTC曲线设定  60度恢复
#define  Over_MOT_TemperRecoverTime        (1000)     

/*延时断电*/
 #define PDELAY                     //    (GP07)
 #define PDELAY_Vaule                   (10000)              //延时断电时间 单位：ms
 #define Pdelay_ON                  //    (GP07 = 1)
 #define Pdelay_OFF                 //    (GP07 = 0)
 
 
/*霍尔堵转保护*/
 #define  HALL_Stall_Enable              (1)
 #define  Stall_time_VALUE               (1000)//(10000)
 #define  BreakDownTime                  (2000)
 #define  StopSendCanTime                (5000)

 /*电量指示灯电压值*/
 #define Vlotage_Value1                 (11.0)
 #define Vlotage_Value2                 (10.4)
 #define Vlotage_Value3                 (9.8)
 
#endif
